package com.pilipala.mapper;

import com.github.pagehelper.Page;
import com.pilipala.dto.SearchDTO;
import com.pilipala.dto.VideoPageDTO;
import com.pilipala.entity.Blog;
import com.pilipala.entity.Video;
import com.pilipala.vo.VideoVO;
import org.apache.ibatis.annotations.*;

@Mapper
public interface VideoMapper {

    /**
     * 新增视频字段
     * @param video 视频的所有字段
     */
    void insert(Video video);

    /**
     * 根据用户Id、视频标题等条件分页查询
     * @param videoPageDTO 各种数据
     * @return 分页后的视频数据
     */
    Page<Video> pageQuery(VideoPageDTO videoPageDTO);


    /**
     * 用于首页显示视频,不带任何条件直接返回视频数据
     * @return 分页后的视频数据 包括total和records
     */
    @Select("select * from video")
    Page<Video> listAll();
     /**
     * 分页搜索
     * @param searchDTO 包括页码、页大小、搜索关键字、排序类型
     * @return 分页后的数据
     */
    Page<Video> search(SearchDTO searchDTO);

    @Select("select * from video where id = #{id}")
    Video getById(Long id);

    @Update("update video set commit_number = commit_number + 1 where id = #{videoId}")
    void incrementComment(Long videoId);

    /**
     * 根据视频Id删除视频
     * @param id 视频Id
     */
    @Delete("delete from video where id = #{id}")
    void delete(Long id);

    /**
     * 根据视频Id修改视频
     * @param video 视频数据
     */
    void update(Video video);

    @Select("select id from favorites where video_id = #{id} and user_id = #{userId}")
    Long getFavoritesPair(Long id, Long userId);

//    关注事件
    @Insert("insert into favorites (video_id,user_id) values (#{videoId},#{userId})")
    void addCollection(Long videoId, Long userId);

    @Delete("delete from favorites where video_id = #{videoId} and user_id = #{userId}")
    void deleteCollection(Long videoId, Long userId);

    @Select("select video_id from favorites where user_id = #{userId}")
    Page<Long> getCollectionByUserId(Long userId);
}
